<?php

// Librairie de fonctions de formulaire de l'application web.
// Séquence de pagination
unset($seqpage);

// ----------------------------------------------------
// Ajoute le titre et l'horloge de fermeture de session
// ----------------------------------------------------
function preparerModule($module) {
    global $seqpage;
    global $nombreaffiche;
    global $nopage;
    global $dir;
    global $tri;
    global $zonerecherche;

    $output = "<script type='text/javascript'>\n";

    // Code jQuery selon le type de bouton requis par le module.
    // ---------------------------------------------------------
    if (isset($module["msgmodifbouton"]) || isset($module["msgajoutbouton"])) {
        $output .= "function changetitre(notitre) {\n";
        $output .= "   if (notitre==1) {\n";
        if (isset($module["msgajoutbouton"])) {
            $output .= "      $(\".ui-dialog-title\").text(\"" . $module["msgajoutbouton"] . "\");\n";
            if (isset($module["actionajoutbouton"])) {
                $output .= "      $(\"#boutonaction\").val(\"" . $module["actionajoutbouton"] . "\");\n";
            }
            foreach ($module["fenetre"]["champs"] as $clef => $item) {
                $output .= "      $(\"#$item\").val(\"\");\n";
            }
        }
        $output .= "   } else {\n";
        if (isset($module["msgmodifbouton"])) {
            $output .= "      $(\".ui-dialog-title\").text(\"" . $module["msgmodifbouton"] . "\");\n";
            $output .= "      $(\"#boutonaction\").val(\"" . $module["actionmodifbouton"] . "\");\n";
            foreach ($module["fenetre"]["champs"] as $clef => $item) {
                $output .= "      $(\"#$item\").val(\"\");\n";
            }
        }
        $output .= "   }\n";
        $output .= "}\n";
    }

    // Ajoute un gestionnaire javascript pour les changement de valeur dans une liste déroulante
    // -----------------------------------------------------------------------------------------
    $output .= "function verifiechangement(objet, formulaire) {\n";
    $output .= "   var valeur = document.getElementById(objet).value;\n";
    $output .= "   var nom = document.getElementById(objet).name;\n";
    $output .= "   var nouvelobjet = document.createElement('input');\n";
    $output .= "   nouvelobjet.setAttribute('type', 'hidden');\n";
    $output .= "   nouvelobjet.setAttribute('name', nom);\n";
    $output .= "   nouvelobjet.setAttribute('id', nom);\n";
    $output .= "   nouvelobjet.setAttribute('value', valeur);\n";
    $output .= "   document.forms[formulaire].appendChild(nouvelobjet);\n";
    $output .= "   document.getElementById(formulaire).submit();\n";
    $output .= "}\n";

    // Code JavaScript pour la recherche ajax
    // --------------------------------------
    if (isset($module["recherche"]) && $module["recherche"] == true) {
        $output .= "function selectedD(choice, choice2){\n";
        $output .= "   var cible = document.getElementById('lemploye');\n";
        $output .= "   cible.value = choice;\n";
        $output .= "   var cible2 = document.getElementById('lreference');\n";
        $output .= "   cible2.value=choice2;\n";
        $output .= "}\n";
        $output .= "function selectedE(id,choice, choice2){\n";
        $output .= "   var cible = document.getElementById(id);\n";
        $output .= "   cible.value = choice;\n";
        $output .= "   var cible2 = document.getElementById('lreference');\n";
        $output .= "   cible2.value=choice2;\n";
        $output .= "   var cible3 = document.getElementById('zonerecherche');\n";
        $output .= "   cible3.value=choice;\n";
        $output .= "}\n";
    }

    // Code jQuery pour le formulaire d'édition
    // ----------------------------------------
    if (isset($module["fenetre"])) {
        $output .= "function overlay() {\n";
        $output .= "  $(\"#fenetremodale\").dialog( \"open\" );\n";
        $output .= "}\n\n";
    }

    // Début DOM
    // ---------
    $output .= "$(document).ready(function() {\n";

    // Définition de la zone de recherche Ajax
    // ---------------------------------------
    if (isset($module["recherche"]) && $module["recherche"] == true) {
        $output .= "   $(\"#zoneresultats\").slideUp();\n";
        $output .= "   $(\"#zonerecherche\").focus(function() {\n";
        $output .= "      if ($(\"#zonerecherche\").val() == 'Recherche') {\n";
        $output .= "         $(\"#zonerecherche\").val('');\n";
        $output .= "      }\n";
        $output .= "   });\n";
        $output .= "   $(\"#zonerecherche\").blur(function() {\n";
        $output .= "       $(\"#zoneresultats\").slideUp();\n";
        $output .= "   });\n";
        $output .= "   $(\"#zonerecherche\").keyup(function(event) {\n";
        $output .= "      var SearchText = $(\"#zonerecherche\").val();\n";
        $output .= "      if (SearchText.length>0) {\n";
        $output .= "         $(\"#zoneresultats\").load(\"ajaxsearch.php\", { zonerecherche: SearchText, id:1 });\n";
        $output .= "         $(\"#zoneresultats\").slideDown();\n";
        $output .= "      } else {\n";
        $output .= "         $(\"#zoneresultats\").slideUp();\n";
        $output .= "      }\n";
        $output .= "    });\n";
    }

    // Définition du formulaire d'édition
    // ----------------------------------
    if (isset($module["fenetre"])) {
        $output .= "       $(\"#fenetremodale\").dialog({\n";
        $output .= "          autoOpen:false, \n";
        $output .= "          show:false, \n";
        $output .= "          height: " . $module["fenetre"]["hauteur"] . ", \n";
        $output .= "          width: " . $module["fenetre"]["largeur"] . ", \n";
        $output .= "          modal:true, \n";
        $output .= "          title:\"\"\n";
        $output .= "        })\n";
    }

    // Code jQuery pour Message de réussite ou échec
    // ---------------------------------------------
    if (isset($module["resultatSQL"])) {
        $output .= "jMessage(\"" . $module["message"] . "\");\n";
    }

    // Fin DOM
    // -------
    $output .= "});\n";
    $output .= "</script>\n";

    // Titre du module
    // ---------------
    $hauteurtitre = (strlen($module["titre"]) > 30) ? 65 : 40;
    $output .= "<div class='hiddenInViewSource' style='height:" . $hauteurtitre . "px;'>\n";
    $output .= "<div class='titremodule' style='height:$hauteurtitre;'>" . $module["titre"];

    // Retour au module avec paramètre par défaut
    // ------------------------------------------
    if (isset($module["urldest"]) && !empty($module["urldest"])) {
        $output .= "<a href='" . $module["urldest"] . "&jeton=" . $module["jeton"] . "'>";
        $output .= "<img src='images/icones/icones_maison.png' style='position:relative; ";
        $output .= "top:+2px; left:+10px;border:0;'></a>";
    }

    $output .= "</div>\n";

    // Message de réussite ou d'échec de la
    // requête SQL (ajout, modif ou suppression)
    // et autres messages.
    // Ne pas afficher le message lorsque nous sommes en recherche
    // -----------------------------------------------------------
    $output .= "<div style='min-width:6%; width:6%; margin:auto; float:left; margin-top:5px; text-align:right;'>\n";
    if (isset($module["resultatSQL"])) {
        $output .= "<button style='background-color:#006466; border:0px; position:relative; top:-5px;'";
        $output .= "onclick='jMessage(\"" . htmlentities($module["message"]) . "\")'>";
        $output .= "<IMG SRC='images/icones/icones_38.png' alt='Message'>";
        $output .= "</button>\n";
    } else {
        $output .= "&nbsp;";
    }
    $output .= "</div>\n";

    // Fermeture automatique de la session
    // Ajout du bouton fermer à l'endroit convenu
    // ------------------------------------------
    $output .= "<div class='horloge'>\n";

    if (isset($module["boutonfermeraction"]) && $module["boutonfermeraction"] == "RevenirMenuPrecedent") {
        $output .= "   <form name='horloge' action='index2.php?page=" . $module["menuprecedent"] . "' method='POST'>\n";
        $output .= "      Temps restant :\n";
        $output .= "      <input readonly='readonly' class='horloge2' name='clock' value='' ";
        $output .= "dir='rtl' type='text'> &nbsp;\n";
        $output .= "      <input class='styled' type=\"submit\" style='cursor:pointer;' value=\"Fermer\">\n";
        $output .= "      <input type='hidden' name='jeton' value='" . $_SESSION['jeton'] . "'>\n";
        $output .= "   </form>";
    } elseif (!(isset($module["boutonfermeraction"]) && $module["boutonfermeraction"] == "fermerfenetre")) {
        $output .= "   <form name='horloge' action='index2.php' method='POST'>\n";
        $output .= "      Temps restant :\n";
        $output .= "      <input readonly='readonly' class='horloge2' name='clock' value='' ";
        $output .= "dir='rtl' type='text'> &nbsp;\n";
        $output .= "      <input class='styled' type=\"submit\" style='cursor:pointer;' value=\"Fermer\">\n";
        $output .= "      <input type='hidden' name='jeton' value='" . $_SESSION['jeton'] . "'>\n";
        $output .= "   </form>";
    } else {
        $output .= "   <form name='horloge'>";
        $output .= "      <input readonly='readonly' class='horloge2' name='clock' ";
        $output .= "value='' dir='rtl' type='text' style='display:none;'>\n";
        $output .= "      <input type='button' class='fermer' value='Fermer' onclick='window.close();'>";
        $output .= "   </form>";
    }

    $output .= "</div>\n";

    // Fin Div principal
    // -----------------
    $output .= "</div>\n";
    $output .= "<div style='clear:both;'></div>\n";

    // Début de la barre de recherche
    // ------------------------------
    $output .= "<table style='width:1200px; margin:auto;'>\n";
    $output .= "<tr>\n";

    // Pagination
    // ----------
    $comptelocal = (isset($module["compte"])) ? $module["compte"] : 0;
    $seqpage = preparePagination($comptelocal, $module["urldest"], $nopage, $tri, $dir, $nombreaffiche,
            empty($module["recherche"]) ? "" : $module["recherche"], $module["listeEmployeurs"] = null,
            $module["listeEmployes"] = null);
    $output .= "<td>";
    $output .= "&nbsp;";
    $output .= "</td>\n";
    $position = 1;

    // Zone de recherche
    // -----------------
    if (isset($module["recherche"]) && $module["recherche"]["engin"] == true) {
        $output .= "<td>\n";
        $output .= "<form method='POST' name='frmRecherche' id='rechercheform' action='";
        $output .= $module["urldest"] . "' autocomplete='off'>\n";
        $val = (!isset($zonerecherche)) ? "Recherche" : $zonerecherche;
        $output .= "<input id='zonerecherche' name='zonerecherche' value='$val' ";
        $output .= "style='font-size:10pt; font-family:arial, helvetica, sans-serif;;'";
        $output .= "onfocus='this.value=\"\";'/>\n";
        $output .= "<input id='loupe' type='image' src='images/rech.gif' />\n";
        $output .= "<input type='hidden' value='' id='lreference' name='lreference'>\n";
        $output .= "<input type='hidden' value='Recherche' id='action' name='action'>\n";
        $output .= "<input type='hidden' value='" . $GLOBALS["jeton"] . "' id='jeton' name='jeton'>\n";
        $output .= "<div style='width:280px; position: relative; top:0px; left:5px;'>\n";
        $output .= "<div id='zoneresultats'></div>\n";
        $output .= "</div>\n";
        $output .= "</form>\n";
        $output .= "</td>\n";
        $position = 1;
    }

    // Liste des employeurs et des employés
    // ------------------------------------
    if (isset($module["recherche"]["engin"]) && $module["recherche"]["engin"] == true && !isset($module["recherche"]["filtre_employeur_employe"])) {
        global $ListeEmployeurs;
        global $ListeEmployes;
        $output .= "<td>\n";
        $output .= "<form method='POST' name='frmRecherche2' id='rechercheform2' ";
        $output .= "action='" . $module["urldest"] . "'>\n";
        $result2 = getEmployeurs($_SESSION["gestion_site"]);
        $param["form"] = "menu2";
        $param["nom"] = "ListeEmployeurs";
        $param["etq"] = "";
        $param["style"] = "width:5cm;";
        if ($_SESSION['gestion_site'] >= 'Oui') {
            $param["defaut"] = (isset($ListeEmployeurs) ? $ListeEmployeurs : '');
        } else {
            $param["defaut"] = $_SESSION["employeur"];
        }
        $param["donnees"] = $result2;
        $param["menu"] = true;
        $param["evt"] = "onchange=\"document.forms['frmRecherche2'].submit();\"";
        $output .= formListbox2($param);

        unset($result2);
        if ($_SESSION['gestion_site'] >= 'Oui') {
            if (isset($module["listeEmployeurs"]) && $module["listeEmployeurs"] > -1) {
                $result2 = getEmployes($ListeEmployeurs, "gestion_site");
            } else {
                $result2 = getEmployes('', "gestion_site");
            }
        } else {
            $param["defaut"] = (isset($module["listeEmployes"]) ? $module["listeEmployes"] : -1);
            $result2 = getEmployes($_SESSION["employeur"], "gestion_site");
        }
        unset($param);
        $param["form"] = "menu2";
        $param["nom"] = "ListeEmployes";
        $param["etq"] = "";
        if ($_SESSION['gestion_site'] >= 'Oui') {
            $param["defaut"] = (isset($module["listeEmployeurs"]) ? $module["listeEmployeurs"] : -1);
        } else {
            $param["defaut"] = $_SESSION["employeur"];
        }
        $param["defaut"] = (isset($module["listeEmployes"]) ? $module["listeEmployes"] : -1);
        $param["donnees"] = $result2;
        $param["menu"] = true;
        $param["evt"] = "onchange=\"document.forms['frmRecherche2'].submit();\"";
        $param["style"] = "width:5cm;";
        $output .= formListbox2($param);
        $output .= "</div>\n";
        global $page;
        if ($_SESSION["gestion_site"] == "Oui") {
            $output .= "<input class='Style12' type='button' value=' X ' onclick='$(\"#ListeEmployeurs\").val(-1);";
        } else {
            $output .= "<input class='Style12' type='button' value=' X ' ";
            $output .= "onclick='$(\"#ListeEmployeurs\").val(" . $_SESSION["employeur"] . ");";
        }
        $output .= "$(\"#ListeEmployes\").val(-1);'>\n";

        // Ajout de la valeur du nombre d'enregistrement par parge
        $output .= "<input type='hidden' name='nombreaffiche' value='$nombreaffiche'>\n";

        // Jeton de sécurité
        $output .= "<input type='hidden' name='jeton' value='" . $GLOBALS["jeton"] . "'>\n";

        $output .= "</form>";
        $output .= "</td>\n";
    }

    // Nombre à afficher par page
    // --------------------------
    if (isset($module["nombre_a_afficher"])) {
        $output .= "<td>\n";
        $nomempl1 = "&ListeEmployeurs=" . (isset($module["listeEmployeurs"]) ? $module["listeEmployeurs"] : -1);
        $nomempl2 = "&ListeEmployes=" . (isset($module["listeEmployes"]) ? $module["listeEmployes"] : -1);
        $output .= "<form id='frmNombre' name='frmNombre' method='POST' action='" . $module["urldest"];
        $output .= "&jeton=" . $module["jeton"] . $nomempl1 . $nomempl2 . "'>\n";
        $output .= formListbox("frmNombre", "nombreaffiche", "Affich&eacute; par groupe de : ",
                $nombreaffiche, $module["nombre_a_afficher"], "", "oui", "width:2cm;");
        $output .= "</form>\n";
        $output .= "</td>\n";
        $position = 1;
    }

    // Bouton d'ouverture du formulaire de détail
    // ------------------------------------------
    if (isset($module["opradmin"]) && !empty($module["opradmin"])) {
        $output .= "<td>\n";
        $output .= "<a href='#' class='lien' style='margin-right:0px; height:30px; line-height:29px;' ";
        $output .= "onclick='changetitre(1); overlay();' id='action_ajout'>";
        $output .= "<div class='user'>" . $module["opradmin"] . "</div></a>\n";
        $output .= "</td>\n";
    }

    // Ancre bas de page
    // -----------------
    if ($nombreaffiche > 15) {
        $output .= "<td style='text-align:right; width:81px;'>\n";
        $output .= "<a name='hautpage' href='#baspage' title='Aller en bas de la page'>Bas de page</a>\n";
        $output .= "</td>\n";
    }

    // Tri
    // ---
    $output .= "<input name='dir' type='hidden' value='$dir'>\n";

    // Fin de la barre de recherche
    // ----------------------------
    $output .= "</tr>\n";
    $output .= "</table>\n";

    // Entête de la liste principale
    // -----------------------------
    if (isset($module["entete"]) && (!isset($module["entete_principale"]) ||
            ($module["entete_principale"] != false && isset($module["entete_principale"])) )) {
        $output .= addHeader($module);
    }

    return $output;
}

// Ajoute simplement une entête de liste
// Inclue également les tris
// -------------------------------------
function addHeader($module) {
    global $nombreaffiche;
    global $dir;
    global $tri;
    global $flechetri;
    global $ListeEmployeurs;
    global $ListeEmployes;

    // -------------------------------------------
    // Création de l'entête d'une liste principale
    // -------------------------------------------
    $taille = "1300px";

    if (isset($module["taille"])) {
        $taille = $module["taille"];
    } elseif (isset($module["tailleliste"])) {
        $taille = $module["tailleliste"];
    }

    $minNo = 22;
    if (isset($module["compte"])) {
        if ($module["compte"] <= 100) {
            $minNo = 22;
        } elseif ($module["compte"] <= 1000) {
            $minNo = 33;
        } elseif ($module["compte"] <= 10000) {
            $minNo = 44;
        }
    }

    // Ajouter les valeurs de $ListeEmployes et $ListeEmployeurs aux liens de tri.
    $ajout = "";
    if (isset($ListeEmployeurs) && $ListeEmployeurs != "-1") {
        $ajout = "&ListeEmployeurs=$ListeEmployeurs";
    }
    if (isset($ListeEmployes) && $ListeEmployes != "-1") {
        $ajout .= "&ListeEmployes=$ListeEmployes";
    }

    // Création de l'en-tête du la liste principale
    // --------------------------------------------
    $output = "<table style='width:$taille; margin:auto; border-collapse:collapse; table-layout:fixed;' class='hoverTable'>\n";
    $output .= "<tr style='height:35px;'>\n";
    $output .= "<th class='lien_tri' style='cursor:default; min-width:" . $minNo . "px; width:" . $minNo . "px;'>#</th>\n";
    foreach ($module["entete"] as $clef => $item) {
        $largeur = "";
        if (isset($item["largeur"])) {
            $largeur = "width:" . $item["largeur"] . "; max-width:" . $item["largeur"] . ";";
        }
        if (isset($module["lientri"]) && $module["lientri"] === true) {
            if ($item[key($item)] !== "-1") {
                // Affichage du lien si l'utilisateur a le droit requis
                // ----------------------------------------------------
                if (!isset($item["droit"]) || isset($item["droit"]) && $_SESSION[key($item["droit"])] === $item["droit"][key($item["droit"])]) {
                    $output .= "<th class='lien_tri' style='$largeur'>";
                    if ($clef != $tri) {
                        $output .= "<a class='lien_tri tri' title='Trier par " . key($item) . "' href='" . $module["urldest"];
                        $output .= "&tri=$clef&dir=desc&jeton=" . $module["jeton"] . "&nombreaffiche=$nombreaffiche$ajout'>" . key($item) . "</a>";
                    } else {
                        $dir2 = ($dir == "asc") ? "desc" : "asc";
                        $output .= "<a class='lien_tri tri' title='Trier par " . key($item) . "' href='" . $module["urldest"];
                        $output .= "&tri=$clef&dir=$dir2&jeton=" . $module["jeton"] . "&nombreaffiche=$nombreaffiche$ajout'>" . key($item);
                        if ($flechetri) {
                            $output .= "&nbsp;<IMG SRC='images/s_$dir2.png' style='border:0px;'></a>\n";
                        }
                        $output .= "</a>\n";
                    }
                    $output .= "</th>\n";
                }
            } else {
                if (!isset($item["droit"]) || isset($item["droit"]) && $_SESSION[key($item["droit"])] === $item["droit"][key($item["droit"])]) {
                    $output .= "<th class='lien_tri' style='$largeur cursor:default;'>" . key($item) . "</th>\n";
                }
            }
        } else {
            $output .= "<th class='lien_tri' style='$largeur cursor:default;'>" . key($item) . "</th>\n";
        }
    }

    // Affichage de la colonne action
    // ------------------------------
    if ($_SESSION["gestion_site"] === "Oui" || isset($item["droit"]) &&
            $_SESSION[key($item["droit"])] === $item["droit"][key($item["droit"])]) {
        if (!isset($module["colonneaction"])) {
            $col_width = isset($module["nbaction"]) ? $module["nbaction"] * 30 : 30;
            $output .= "<th class='lien_tri' style='min-width:" . $col_width . "px; cursor:default;'></th>\n";
        }
    }
    $output .= "</tr>\n";

    return $output;
}

// -------------------------------------------------------------
// Prépare la séquence de pagination dans les listes principales
// -------------------------------------------------------------
function preparePagination($nombre, $destination, $nopage, $tri, $dir, $nb, $module, $listeEmployeurs, $listeEmployes) {
    global $jeton;
    $nbpages = ceil($nombre / $nb);
    $lreference = (isset($module["lreference"]) && !empty($module["lreference"])) ? "&lreference=" . $module["lreference"] : "";
    $zonerecherche = (isset($module["zonerecherche"]) && !empty($module["zonerecherche"])) ? "&zonerecherche=" . $module["zonerecherche"] : "";
    $jetonTxt = "&jeton=" . $jeton;

    //Ajouter les valeurs de $ListeEmployes et $ListeEmployeurs aux liens de tri.
    $ajout = (isset($listeEmployeurs) && $listeEmployeurs != "-1") ? "&ListeEmployeurs=$listeEmployeurs" : "";
    $ajout .= (isset($listeEmployes) && $listeEmployes != "-1") ? "&ListeEmployes=$listeEmployes" : "";

    $seqpage = "<div class='pagination'>";
    if ($nbpages > 1) {
        if ($nopage > 1) {
            $seqpage .= "<a class='page' title='Page précédente' href='$destination&tri=$tri&dir=$dir&nopage=";
            $seqpage .= ($nopage - 1) . "&nombreaffiche=$nb" . $ajout . $lreference;
            $seqpage .= $zonerecherche . $jetonTxt . "'>Précédent</a>\n&nbsp;";
        }
        if ($nombre > $nopage * $nb) {
            $seqpage .= "<a class='page' title='Page suivante' href='$destination&tri=$tri&dir=$dir&";
            $seqpage .= "nopage=" . ($nopage + 1) . "&nombreaffiche=$nb" . $ajout . $lreference;
            $seqpage .= $zonerecherche . $jetonTxt . "'>Suivant</a>\n&nbsp;";
        }
    }
    $seqpage .= "<div style='width:200px;'>";
    if ($nombre > 0) {
        $seqpage .= "Page : $nopage / ";
        $seqpage .= "Nombre : $nombre";
    }
    $seqpage .= "</div>\n";

    $seqpage .= "</div>\n";
    return $seqpage;
}

// ------------------------------------------------------
// Ouverture de la fenêtre modale pour ajout/modification
// ------------------------------------------------------
function fenetreModaleDebut($param, $scriptName, $jeton) {
    $output = " <script type='text/javascript'>\n";

    // Préparation de la fonction Javascript
    // -------------------------------------
    $output .= "function mettrevaleurdansid(";
    $compteur = 0;
    $car = "";
    foreach ($param["champs"] as &$valeur) {
        if ($compteur > 0) {
            $car = ", ";
        }
        $output .= $car . $valeur;
        $compteur++;
    }
    unset($valeur);
    $output .= "){\n";
    foreach ($param["champs"] as &$valeur) {
        $output .= "   if (" . $valeur . "!=\"\") $(\"#" . $valeur . "\").val(" . $valeur . ");\n";
    }
    unset($valeur);
    $output .= "   overlay();\n";
    $output .= "}\n";

    // Fermeture à la jQuery
    // ---------------------
    $output .= "function fermerfenetremodale() {\n";
    $output .= "   $('#fenetremodale').dialog('close');\n";
    $output .= "}\n";

    // Ouverture à la jQuery
    // ---------------------
    $output .= "$(document).ready(function() {\n";
    $output .= "   $(\"#fenetremodale\").css(\"visibility\",\"visible\");";
    $output .= "});";
    $output .= "</script>\n";
    $output .= "<div id='fenetremodale' style='display:none;'>\n";

    $output .= "<table width='100%' border='0' >\n";
    $output .= "<tr>\n";
    $output .= "<td align='center' width='100%'>\n";
    $output .= "<div style='background:#f2f6f7'>\n";

    // Exécution de l'envoi des données du formulaire
    // ----------------------------------------------
    $output .= "<form action='" . $scriptName . "?page=" . $param["nom"];
    $output .= "&jeton=" . $jeton . "' method='post' id='frmModif' name='frmModif' "; //>\n";
    if (isset($param["validation"])) {
        $output .= " onSubmit='return ValidationFormulaire();'";
    }
    $output .= ">\n";
    $output .= "<table width='100%'>\n";
    $output .= "<tr>\n";
    $output .= "<td colspan='2'>\n";
    $output .= "<table width='100%'>\n";
    $output .= "<tr>\n";
    $output .= "</tr>\n";
    $output .= "</table>\n";
    $output .= "</td>\n";
    $output .= "</tr>\n";
    return $output;
}

// ------------------------------
// Fermeture de la fenêtre modale
// ------------------------------
function fenetreModaleFin($titre) {
    $output = "   <tr>\n";
    $output .= "   <td colspan='2' style='text-align:center; height:50px'>\n";
    if (is_array($titre)) {
        foreach ($titre as $clef) {
            $output .= "<input class='styled' type=\"submit\" id='boutonaction' ";
            $output .= "name=\"action\" value=\"" . $clef . "\">&nbsp;\n";
        }
    } elseif ($titre != '') {
        $output .= "   <input class='styled' type=\"submit\" id='boutonaction' ";
        $output .= "name=\"action\" value=\"" . $titre . "\">\n";
    }
    $output .= "   <input class='styled' type=\"button\" id='boutonaction' value=\"Annuler\" ";
    $output .= "onclick='fermerfenetremodale();'>&nbsp;\n</td>\n" . "   </tr>\n";
    $output .= "   </table>\n" . "   </form>\n";
    $output .= "   </div>\n" . "   </td>\n";
    $output .= "   </tr>\n" . "   </table>\n";
    $output .= "</div>\n";
    return $output;
}

// -------------------------------
// Création d'une liste déroulante
// -------------------------------
function formListbox($nomformulaire, $nomliste, $etiquette, $valeurdefaut, $donnees, $eventhandler = "", $entete = "oui", $style = 'width:8.6cm;') {
    $listbox = $etiquette;
    $listbox .= "<select name='" . $nomliste . "' id='" . $nomliste;
    $listbox .= "' class='Style12' style='$style' size='1' ";
    $listbox .= ($eventhandler !== "") ? $eventhandler : "onchange=\"verifiechangement('" . $nomliste . "','" . $nomformulaire . "');\"";
    $listbox .= ">\n";

    $listbox2 = "";
    $condition = false;
    foreach ($donnees as &$ligne) {
        $listbox2 .= "<option value='" . $ligne["refid"] . "' ";
        if ($ligne["refid"] == $valeurdefaut) {
            $listbox2 .= "selected='selected'";
            $condition = true;
        }
        $listbox2 .= ">";
        $listbox2 .= htmlentities($ligne["valeur"], ENT_SUBSTITUTE, "UTF-8") . "</option>\n";
    }
    unset($ligne);

    $listbox .= "<option value=-1";
    if (!$condition) {
        $listbox .= " selected='selected'";
    }
    $listbox .= ">";
    $listbox .= "--------------------</option>\n";
    $listbox .= $listbox2;
    $listbox .= "</select>\n";
    return $listbox;
}

// Fonction dérivée de formlistbox
// -------------------------------
function formListbox2($param) {
    $nomformulaire = $param["form"];
    $nomliste = $param["nom"];
    $etiquette = $param["etq"];
    $valeurdefaut = $param["defaut"];
    $donnees = $param["donnees"];
    $event = (isset($param["evt"])) ? $event = $param["evt"] : "";
    $entete = (isset($param["entete"])) ? $entete = $param["entete"] : "oui";
    $style = (isset($param["style"]) ? $param["style"] : "");

    return formListbox($nomformulaire, $nomliste, $etiquette, $valeurdefaut, $donnees, $event, $entete, $style);
}

// --------------------------------------------------------------------------
// Fonction de préparation du bouton Modifier selon les champs du formulaire
// --------------------------------------------------------------------------
function prepareBoutonModifier($param) {
    $output = "<INPUT class='modifier' title='Modifier' id='Modifier' TYPE='button' ";
    $output .= "style='width:24px;' VALUE='Modifier' ";
    $output .= "onclick='changetitre(2);";
    $output .= "mettrevaleurdansid(";
    $a = 0;

    foreach ($param as &$valeur) {
        if ($a != 0 && $a <= count($param) - 1) {
            $output .= ",";
        }
        $output .= "\"" . str_replace("'", "&apos;", htmlentities(stripslashes($valeur), ENT_SUBSTITUTE, "UTF-8")) . "\"";
        $a++;
    }
    unset($valeur);
    $output .= ");'>";
    return $output;
}

// ------------------------------------------------------------------------------
// Fonction d'écriture d'une chaîne de lettre limitée à la tauille de la cellule.
// ------------------------------------------------------------------------------
function ecrireTexteLimite($chaine, $largeur) {
    $output = "<div class='depasselargeur' style='width:" . $largeur . "px' title=\"";
    $output .= htmlentities($chaine, ENT_SUBSTITUTE, "UTF-8") . "\">";
    $output .= htmlentities($chaine, ENT_SUBSTITUTE, "UTF-8") . "</div>\n";
    return $output;
}

// -------------------------------------------------------------------------------
// Fonction d'écriture d'une adresse de courriel limitée à un nombre de caractères
// -------------------------------------------------------------------------------
function ecrireMailToLimite($chaine, $largeur) {
    $output = "<div class='depasselargeur' style='width:" . $largeur . "px'>";
    if (strlen(trim($chaine)) > 0) {
        $output .= "<a class='lien' href='mailto:$chaine' title='";
        $output .= htmlentities($chaine, ENT_SUBSTITUTE, "UTF-8") . "'>";
        $output .= htmlentities($chaine, ENT_SUBSTITUTE, "UTF-8") . "</a>";
    } else {
        $output .= "<a class='lien' href='mailto:$chaine' title=''></a>";
    }
    $output .= "</div>\n";
    return $output;
}
